package com.kfm.base.collection;

import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;

public class Demo07 {

    public static void main(String[] args) {
        /*
            Set 唯一不重复
                TreeSet HashSet LinkedHashSet

            TreeSet, 不能存 null。
            如果使用 无参构造 则 Set 集合中的元素要具备可比较行(实现 Comparable 接口)
            如果使用 构造(比较器) 则 Set 集合中的元素按照比较器比较顺序排序

         */
//        Set<Object> of = Set.of();
//        TreeSet<String> set = new TreeSet<>(new Comparator<String>() {
//            @Override
//            public int compare(String o1, String o2) {
//                return o1.length() - o2.length();
//            }
//        });

//        TreeSet set = new TreeSet(List.of("a", "a", "b", "c", "d", "e", "f", "g"));

//        set.add(new Student("", 0));
//        set.add("b");
//        set.add("aa");

//        System.out.println(set.size());
//        System.out.println(set);
//
//        Set subSet = set.subSet("a", "c");
//
//        System.out.println(subSet);
//
//        subSet.remove("a");
//
//        System.out.println(subSet);
//        System.out.println(set);
//
//        Object first = set.first();
//        System.out.println(first);

        TreeSet<String> set = new TreeSet(List.of("null", "a", "a", "b", "c", "e", "f", "g"));

        System.out.println(set); // [a, b, c, e, f, g, null]

        // 返回此集合中大于或等于给定元素的最小元素，如果没有这样的元素，则返回null。
        String ceiling = set.ceiling("d");
        System.out.println(ceiling);// e

        // 返回当前在此集合中的第一个（最低的）元素。
        String first = set.first();
        System.out.println(first); // a

        // 返回此集合中小于或等于给定元素的最大元素，如果没有这样的元素，则返回null。
        String floor = set.floor("d");
        System.out.println(floor); // c

        // 返回此集合中元素严格小于toElement的部分的视图。
        SortedSet<String> headSet = set.headSet("c");
        System.out.println(headSet); // a, b

        // 返回此集合中严格大于给定元素的最小元素，如果没有这样的元素，则返回null。
        String higher = set.higher("c");
        System.out.println(higher); // e

        // 返回此集合中元素严格大于或等于fromElement的部分的视图。
        SortedSet<String> tailSet = set.tailSet("c");
        System.out.println(tailSet); // c, e, f, g, null

        // 迭代
        for (Object obj : set){
            System.out.println(obj);
        }
    }
}
